Expand description
eframe - the egui
framework crate
If you are planning to write an app for web or native,
and want to use egui
for everything, then eframe
is for you!
To get started, see the examples.
To learn how to set up eframe
for web and native, go to https://github.com/emilk/eframe_template/ and follow the instructions there!
In short, you implement App
(especially App::update
) and then
call crate::run_native
from your main.rs
, and/or call eframe::start_web
from your lib.rs
.
Usage, native:
use eframe::egui;
fn main() {
let native_options = eframe::NativeOptions::default();
eframe::run_native("My egui App", native_options, Box::new(|cc| Box::new(MyEguiApp::new(cc))));
}
#[derive(Default)]
struct MyEguiApp {}
impl MyEguiApp {
fn new(cc: &eframe::CreationContext<'_>) -> Self {
// Customize egui here with cc.egui_ctx.set_fonts and cc.egui_ctx.set_visuals.
// Restore app state using cc.storage (requires the "persistence" feature).
// Use the cc.gl (a glow::Context) to create graphics shaders and buffers that you can use
// for e.g. egui::PaintCallback.
Self::default()
}
}
impl eframe::App for MyEguiApp {
fn update(&mut self, ctx: &egui::Context, frame: &mut eframe::Frame) {
egui::CentralPanel::default().show(ctx, |ui| {
ui.heading("Hello World!");
});
}
}
Usage, web:
#[cfg(target_arch = "wasm32")]
use wasm_bindgen::prelude::*;
/// Call this once from the HTML.
#[cfg(target_arch = "wasm32")]
#[wasm_bindgen]
pub fn start(canvas_id: &str) -> Result<AppRunnerRef, eframe::wasm_bindgen::JsValue> {
let web_options = eframe::WebOptions::default();
eframe::start_web(canvas_id, web_options, Box::new(|cc| Box::new(MyEguiApp::new(cc))))
}
Feature flags
-
dark-light
— Detect dark mode system preference usingdark-light
.See also
NativeOptions::follow_system_theme
andNativeOptions::default_theme
. -
default_fonts
(enabled by default) — If set, egui will useinclude_bytes!
to bundle some fonts. If you plan on specifying your own fonts you may disable this feature. -
glow
(enabled by default) — Useglow
for painting, viaegui_glow
. -
persistence
— Enable saving app state to disk. -
puffin
— Enable profiling with thepuffin
crate.Only enabled on native, because of the low resolution (1ms) of time keeping in browsers.
eframe
will callpuffin::GlobalProfiler::lock().new_frame()
for you -
screen_reader
— Enable screen reader support (requiresctx.options().screen_reader = true;
) -
wgpu
— Usewgpu
for painting (viaegui_wgpu
). This overrides theglow
feature.
Optional dependencies
document-features
— Enable this when generating docs.
Re-exports
pub use egui;
pub use egui::emath;
pub use egui::epaint;
pub use egui_glow;
pub use glow;
pub use egui_wgpu;
pub use wgpu;
Structs
Data that is passed to AppCreator
that can be used to setup and initialize your app.
Represents the surroundings of your app.
Image data for an application icon.
Information about the integration passed to the use app each frame.
Options controlling the behavior of a native window.
Information about the application’s main window, if available.
Enums
Selects the level of hardware graphics acceleration.
What rendering backend to use.
Dark or Light theme.
WebGL Context options
Constants
Traits
Implement this trait to write apps that can be compiled for both web/wasm and desktop/native using eframe
.
A place where you can store custom data in a way that persists when you restart the app.
Functions
This is how you start a native (desktop) app.
Type Definitions
This is how your app is created.